package com.jerseyapi.resource;

import com.jerseyapi.entities.User;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import java.util.Random;

@Path("user")
public class UserResource {
//这个方法主要介绍@GET，@Path，@Produces，@PathParam，@DefaultValue，@QueryParam注解的使用
    @GET
    @Path("{username}")
    @Produces(MediaType.APPLICATION_XML)
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public User getUser(@PathParam("username") String userName, @DefaultValue("description") @QueryParam("desc") String desc) {
        User user = new User();
        user.setId(new Random().nextInt());
        user.setUserName(userName);
        user.setDesc(desc);
        return user;
    }
//访问路径：http://localhost:8080/api2/user/zhangsan?desc=xxx; username可以随便写


//这个方法主要介绍@POST，@Consumes,@FormParam注解的使用
    @POST
    @Path("updateUser")
    @Consumes("application/x-www-form-urlencoded")
    public void updateUser(@FormParam("name") String userName, @FormParam("desc") String desc) {
        User user = new User();
        user.setId(1);
        user.setUserName(userName);
        user.setDesc(desc);
        System.out.println(user);
        System.out.println(user.getUserName()+user.getDesc());
    }
//访问路径：http://localhost:8080/api2/user/updateUser;这个是通过提交表单访问的

//这个方法主要介绍@BeanParam的使用
    @POST
    @Path("updateUser1")
    @Produces(MediaType.APPLICATION_XML)
    @Consumes("application/x-www-form-urlencoded")
    public User updateUser1(@BeanParam User user) {
//注意这个方法需要在User这个bean中使用@FromParam注解
        System.out.println(user);
        return user;
    }
//访问路径：http://localhost:8080/api2/user/updateUser1;这个是通过提交表单访问的

//这个方法主要介绍@Context注解的使用
    @Context
    HttpServletRequest request;
    @Context
    HttpServletResponse response;
    @Context
    ServletConfig servletConfig;
    @Context
    ServletContext servletContext;
    @Context
    HttpHeaders header;
    @Context
    UriInfo info;
    @GET
    @Path("/test/{param}")
    @Produces(MediaType.APPLICATION_XML)
    public User getContext() {
        MultivaluedMap<String, String> queryParameters = info.getQueryParameters();
        MultivaluedMap<String, String> pathParameters = info.getPathParameters();
        System.out.println(queryParameters);
        System.out.println(pathParameters);
        System.out.println(this.request);
        System.out.println(this.response);
        System.out.println(this.servletConfig);
        System.out.println(this.servletContext);
        System.out.println(this.header);
        System.out.println(this.info);
        return new User(1, "gusi");
    }

//访问路径：localhost:8080/api2/user/test/xxx?xxx=xxx&xxx=xxx;xxx都是可以乱写的


    @PUT
    @Path("updateUser2")
    @Produces(MediaType.APPLICATION_XML)
   @Consumes("application/x-www-form-urlencoded")
    public User updateUser2(@BeanParam User user) {
//注意这个方法需要在User这个bean中使用@FromParam注解
        System.out.println(user.getUserName());
        return user;
    }


}